Partnerzy
PolProg
Lomsel
KonradVme

Serwer sponsoruje

Certyfikaty

Valid HTML 4.01!
Valid CSS!

Kurs Java (10)

Spis tematów

1. Język Java
  1.1. Elementarny program: tekst źródłowy, kompilacja, interpretacja
  1.2. Klasy: definicja, dziedziczenie, tworzenie obiektów
  1.3. Interfejsy
  1.4. Pliki źródłowe i pakiety
  1.5. Polimorfizm
  1.6. Obsługa wyjątków
  1.7. Zarządzanie pamięcią
  1.8. Współbieżność
  1.8.1 Synchronizacja wątków
  1.9. Obiekty sieciowe
2. Aplety - programy Javy na stronach WWW
3. Standardowe klasy Javy

4. Servlety - programy Javy na serwerze WWW
5. Podsumowanie
6. Programy - ćwiczenia

/czcionką pogrubioną zaznaczono tematy zawarte w tej części/


4. Servlety - programy Javy na serwerze WWW

Servlety są modułami, które są uruchamiane wewnątrz serwerów przetwarzających zapytania i generujących odpowiedzi, takich jak np. rozszerzone o obsługę Javy serwery WWW. Rozszerzają one funkcjonalność tych serwerów. Można w uproszczeniu powiedzieć, że servlety dla serwerów są tym, czym aplety dla przeglądarek.

Servlety stanowią alternatywę dla skryptów CGI, umożliwiając łatwą metodę dynamicznego tworzenia dokumentów HTML. Są one łatwiejsze do pisania dzięki wykorzystaniu środowiska Javy. Są również szybciej wykonywane, gdyż wywołanie servletu odbywa się nie poprzez uruchomienie nowego procesu, co jest kosztowne ze względu na czas procesora i zasoby pamięciowe, lecz jako wątek. Co więcej, kod wykonywalny dla servletu jest ładowany do serwera tylko raz, gdy po raz pierwszy żądana jest usługa oferowana przez dany servlet lub automatycznie, gdy zostanie zmieniony kod servleta. Potem servlet pozostaje w pamięci serwera i może równolegle obsługiwać wiele zapytań z możliwością komunikacji pomiędzy nimi.

Klasy implementujące funkcje servletów znajdują się w pakiecie javax.servlet dostępnego z firmy Sun jako Java Servlet Development Kit. Zawierają one abstrakcyjną klasę GenericServlet oraz interfejs Servlet, które definiują podstawowe własności ogólnych servletów, czyli modułów przetwarzających zapytania i generujących odpowiedzi. Jednak najczęściej korzysta się z podklas znajdujących się w pakiecie javax.servlet.http definiujących servlety HTTP. Klasa HttpServlet posiada m.in. takie metody jak doGet i doPost obsługujące typowe zapytania CGI, czy uniwersalną metodę service obsługującą wszystkie rodzaje zapytań. Najprostszy servlet może wyglądać następująco:

HelloWorldServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldServlet extends HttpServlet {
   public void doGet (HttpServletRequest req,
      HttpServletResponse res)
      throws ServletException, IOException {

      res.setContentType("text/html");
      ServletOutputStream out = res.getOutputStream();
      out.println("<html>");
      out.println("<head><title>Hello World</title></head>");
      out.println("<body>");
      out.println("<h1>Hello World</h1>");
      out.println("</body></html>");
   }
}

Większość użytecznych servletów czyta parametry wejściowe przekazane im z przeglądarki poprzez metody GET lub POST i na ich podstawie tworzy odpowiedni dokument HTML. Prosty przykład takiego servletu przedstawiono poniżej.

Hello.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Hello extends HttpServlet {
   public void service(HttpServletRequest req,
      HttpServletResponse res)
      throws ServletException, IOException {

      res.setContentType("text/html");
      PrintWriter toClient = res.getWriter();
      toClient.println("<html><head>");
      toClient.println("<title>Hello</title>");
      toClient.println("</head>");
      toClient.println("<h1>Hello " +
         req.getParameterValues("name")[0] + "!</h1>");
      toClient.println("</body></html>");
      toClient.close();
   }
}

Powyższy servlet można wywołać na kilka sposobów. Można podać w przeglądarce URL

    http://www.task.gda.pl/servlet/Hello?name=Darek

i wywołać servlet przekazując parametry metodą GET. Można na stronie HTML umieścić formularz:

<form action=http://www.task.gda.pl/servlet/Hello method=POST>
Podaj swoje imię: <input type=text name=name>
<input type=submit value=Wyślij>
</form>

i wywołać servlet przekazując parametry metodą POST. Można również wykorzystać tag <servlet> na stronie HTML zapisanej w pliku z rozszerzeniem shtml.

Hello.shtml

...
<servlet code=Hello>
<param name=name value=Darek>
</servlet>
...

Wtedy serwer WWW rozszerzony o funkcjonalność servletów zastąpi na stronie HTML powyższy tag wynikiem generowanym przez servlet Hello i tak przetworzoną stronę prześle do przeglądarki.
Dostępnych jest już wiele serwerów WWW obsługujących servlety Javy. Przykładami mogą być Java Web Server firmy Sun lub darmowy dla celów niekomercyjnych JRun firmy Live Software. Ten ostatni może pracować jako samodzielny serwer WWW, bądź jako moduł rozszerzający funkcjonalność innych znanych serwerów WWW np. Apache, Microsoft IIS, Netscape.

5. Podsumowanie

Zalety języka Java:

  • "ożywienie" WWW - swego rodzaju "lingua franca" Internetu
  • język pozwala łatwo pisać aplikacje sieciowe
  • przenośność - niezależność od platformy dzięki JVM; Java poprzez swój B-kod staje się najbliższą aproksymacją (zbudowaną raczej z software niż z hardware, chociaż anonsowane są już "Java chips") jednego z najstarszych marzeń przemysłu komputerowego: prawdziwie uniwersalna maszyna  wirtualna
  • prawie czysta implementacja paradygmatu obiektowego
  • usunięcie arbitralnego pojęcia wskaźnika jak w C++
  • wsparcie dla zbierania nieużytków
  • brak samodzielnych (tj. definiowanych poza klasami) funkcji zewnętrznych
  • weryfikacja kodu w fazie kompilacji i w fazie wykonania na zgodność ze standardem języka
  • dynamiczne ładowanie klas (w locie)
  • biblioteki klas dla GUI, sieciowe i WWW

Wady:

  • Brak definiowanych przez użytkownika przeciążonych operatorów
  • złamanie zasad obiektowości w standardowych bibliotekach klas: w klasach opakowań (kopertowych), w klasach kolekcji i w klasach łańcuchów
  • Komunikaty są rzadko polimorficzne i rzadko trafiają na oczekiwaną strukturę dziedziczenia
  • brak klas parametryzowanych (genericity, templates)
  • dziedziczenie tylko pojedyncze
  • usunięcie instrukcji assert znanej w C i C++
  • pogmatwana (zawikłana) struktura modularna z trzema wpływającymi wzajemnie na siebie (interagującymi) koncepcjami (klasy, pakiety zagnieżdżone, pliki źródłowe)

Bibliografia

[1] Cargill T. An Overview of Java for C++ Programmers. C++ Report, vo. 8, No. 2, pp. 46-49, 1996.
[2] Lorenz M. Java as an Object-Oriented Language. SIGS Books & Multimedia, New York 1996.
[3] Martin R. C++ and Java: A Critical Comparison. C++ Report, vo. 9, No. 1, pp. 42-49, 1997.
[4] Jain P. and Schmidt D.C. Experiences Converting a C++ Communication Software Framework to Java. C++ Report, vo. 9, No. 1, pp. 51-66, 1997.
[5] Gosling J., Joy B, Steele G. The Java Language Specification. Addison-Wesley, 1996, http://java.sun.com/docs/books/jls/.
[6] The Java Tutorial. http://java.sun.com/docs/books/tutorial/, 1998.
[7] JDK1.1.6 Documentation. http://java.sun.com/products/jdk/1.1/docs/, 1998.
[8] Servlet Tutorial. http://www.task.gda.pl/java/ServletTutorial.html, 1998.

Kurs pochodzi ze strony: Java Kurs

Dla magazynu @t opracował:
Dariusz Frankowski

 

Spis treści Redakcja @t Newsy
Software Hardware Internet Webmastering System Programowanie Grafika Telefonia Film Gry Magazyn Humor

Spis treści